package com.medical.blood.service;

import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.medical.blood.entity.SampleStatus;
import com.medical.blood.mapper.SampleStatusMapper;
import org.springframework.stereotype.Service;
import java.util.Date;

@Service
public class SampleStatusService extends ServiceImpl<SampleStatusMapper, SampleStatus> {

    /**
     * 初始化样本状态（采血后默认状态为“待分离”）
     * @param sampleId 样本ID
     * @return 初始化结果
     */
    public boolean initSampleStatus(Long sampleId) {
        SampleStatus status = new SampleStatus();
        status.setSampleId(sampleId);
        status.setStatus("待分离"); // 初始状态
        return save(status);
    }

    /**
     * 更新样本状态（如“待分离”→“已分离”）
     * @param sampleId 样本ID
     * @param newStatus 新状态
     * @param separationTime 分离完成时间（状态为“已分离”时必填）
     * @param storageLocation 冷藏位置（状态为“已分离”后必填）
     * @return 更新结果
     */
    public boolean updateStatus(Long sampleId, String newStatus,
                                Date separationTime, String storageLocation) {
        LambdaUpdateWrapper<SampleStatus> wrapper = new LambdaUpdateWrapper<>();
        wrapper.eq(SampleStatus::getSampleId, sampleId)
                .set(SampleStatus::getStatus, newStatus);

        // 若状态为“已分离”，补充分离时间和冷藏位置
        if ("已分离".equals(newStatus)) {
            wrapper.set(SampleStatus::getSeparationTime, separationTime)
                    .set(SampleStatus::getColdStorageLocation, storageLocation);
        }
        return update(wrapper);
    }

    /**
     * 查询样本状态流转记录
     * @param sampleId 样本ID
     * @return 状态详情（供医护人员后台查看）
     */
    public SampleStatus getSampleStatus(Long sampleId) {
        return lambdaQuery()
                .eq(SampleStatus::getSampleId, sampleId)
                .one();
    }
}